#pragma once

#ifndef ABSTRACT_CYCLE_FINDER_ALGORITHM
#define ABSTRACT_CYCLE_FINDER_ALGORITHM

/*! \file AbstractCycleFinderAlgorithm.h
	\brief Header file for AbstractCycleFinderAlgorithm class.
	
	Details.
*/

#include <vector>
#include "boost/graph/adjacency_list.hpp"

#include "Graph.h"

namespace analyzer {
	
	//! This class is used for represents a cycle finder algorithm.
	class AbstractCycleFinderAlgorithm
	{
	public:
		/*! \fn AbstractCycleFinderAlgorithm(void)
			\brief Constructor of class AbstractCycleFinderAlgorithm
		*/
		AbstractCycleFinderAlgorithm(void);
		
		/*! \fn ~AbstractCycleFinderAlgorithm(void)
			\brief Destructor of class AbstractCycleFinderAlgorithm.
		*/
		virtual ~AbstractCycleFinderAlgorithm(void);
		
		/*! \fn virtual std::vector<std::vector<int> > findCycle(const Graph& graph)=0
			\brief Find a cycle in graph from argument.
			\param graph Is a graph in which the function looks for cycles.
			\return This method return the container of containers of integer values representing the cycles in the graph.
		*/
		virtual std::vector<std::vector<int> > findCycle(const Graph& graph) =0;
	};
}

#endif // ABSTRACT_CYCLE_FINDER_ALGORITHM
